/**
 * 
 */
package com.cater.talents.utils;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.Writer;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;

/**
 * @Description: TODO
 * @author: yong
 * @time:2018年6月10日 下午4:19:29
 */
public class FreemarkerUtil {
	public Template getTemplate(String name) {
		try {
			// 通过Freemaker的Configuration读取相应的ftl
			Configuration cfg = new Configuration();
			// 设定去哪里读取相应的ftl模板文件
			cfg.setDirectoryForTemplateLoading(new File("src/main/resources/templates"));
			// 在模板文件目录中找到名称为name的文件
			Template temp = cfg.getTemplate(name);
			return temp;
		} catch (IOException e) {
			e.printStackTrace();
		}
		return null;
	}

	/**
	 * 控制台输出
	 * 
	 * @param name
	 * @param root
	 */
	public void print(String name, Map<String, Object> root) {
		try {
			// 通过Template可以将模板文件输出到相应的流
			Template temp = this.getTemplate(name);
			temp.process(root, new PrintWriter(System.out));
		} catch (TemplateException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	/**
	 * 输出HTML文件
	 * 
	 * @param name
	 * @param root
	 * @param outFile
	 */
	public String fprint(String name, Map<String, Object> root, String outFile, HttpServletRequest request) {
		FileWriter out = null;
		SimpleDateFormat sdf = new SimpleDateFormat("yyyyMM");
		String realpath = "/static/report/" + sdf.format(new Date()) + "/";
		String path = request.getSession().getServletContext().getRealPath(realpath);
		try {
			// 通过一个文件输出流，就可以写到相应的文件中，此处用的是绝对路径
			File file = new File(path);
			if (!file.exists()) {
				file.mkdirs();
			}
			out = new FileWriter(new File(path + outFile));
			Configuration cfg = new Configuration();
			// 设定去哪里读取相应的ftl模板文件
			cfg.setServletContextForTemplateLoading(request.getSession().getServletContext(), "/templates");
			Template temp = cfg.getTemplate(name);
			temp.process(root, out);
		} catch (IOException e) {
			e.printStackTrace();
		} catch (TemplateException e) {
			e.printStackTrace();
		} finally {
			try {
				if (out != null)
					out.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return realpath + outFile;
	}

	public static void main(String[] args) throws Exception {
		Configuration cfg = new Configuration();
		cfg.setDirectoryForTemplateLoading(new File("src/main/resources/templates"));
		Map map = new HashMap();
		map.put("name", "你大爷");
		Template template = cfg.getTemplate("recommend_report.ftl");
		Writer out = new OutputStreamWriter(System.out);
		template.process(map, out);
		out.flush();
	}
}
